<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

/**
 * CuentaInstitucional
 *
 * @TODO: Seria deseable agregar mas filtros y funciones para prevenir inyeccion
 * SQL. Las funciones que estan aplicadas son las "minimas" recomendadas por la
 * documentacion del sitio de PHP.
 *
 * Libreria utilizada para chequear si la existencia de un "Usuario
 * institucional" contra la DB de correos de la facultad.
 */
class CuentaInstitucional {

    // Ver __construct() ante cualquier duda
    private $CI = NULL;
    // Datos de conexion con la DB de correos institucionales
    private $host = 'mail.frsf.utn.edu.ar';
    private $username = 'grupoweb';
    private $password = 'grupo_web2010';
    private $db_name = 'mail';
    private $table = 'postfix_users';

    function __construct() {
        $this->CI = & get_instance();
    }

    /**
     * chequear
     *
     * Funcion que autentifica un usuario y password contra la DB de cuentas de
     * correo institucional.
     *
     * @param String $user Usuario de correo institucional SIN EL SUFIJO @frsf.utn.edu.ar
     * @param String $password Password del correo institucional SIN ENCRIPTAR.
     * @return bool TRUE Si existe el usuario con la password correspondiente.
     */
    public function chequear($user, $password) {
        // Nos conectamos al servidor y seleccionamos la DB correspondiente
        $link = mysql_connect($this->host, $this->username, $this->password);
        if ($link == FALSE) {
            die('error en la conexion con la DB de correos institucionales.');
        }
        mysql_select_db($this->db_name);

        // Escapamos los caracteres especiales para prevenir inyeccion SQL
        $user = mysql_real_escape_string(stripslashes($user));
        $password = mysql_real_escape_string(stripslashes($password));

        // Elegir la funcion de acuerdo a la version de PHP
        $password = $this->makeRawSHA1Password_php5($password);
        //$password = $this->makeRawSHA1Password_php4($password);
        // Realizamos la consulta y verificamos si la cantidad de filas en el
        // resultado es 1. Luego cerramos la conexion
        $sql = "SELECT pu.email, pu.crypt FROM `" . $this->table . "` as pu WHERE `email` LIKE '" . $user . "@frsf.utn.edu.ar' AND `crypt` LIKE '" . $password . "';";
        $result = mysql_query($sql);

        mysql_close($link);
        return (mysql_num_rows($result) == 1);
    }

    /**
     * existeUsuario
     *
     * Funcion que autentifica verifica si existe un usuario dado en la DB de
     * correos intitucionales.
     *
     * @param String $user Usuario de correo institucional SIN EL SUFIJO @frsf.utn.edu.ar
     * @return bool TRUE Si existe el usuario con la password correspondiente.
     */
    public function existeUsuario($user) {
        // Nos conectamos al servidor y seleccionamos la DB correspondiente
        $link = mysql_connect($this->host, $this->username, $this->password);
        if ($link == FALSE) {
            // Die ingresado para depurar el error de conexion
            die('error en la conexion con la DB de correos institucionales.');
        }
        mysql_select_db($this->db_name);

        // Escapamos los caracteres especiales para prevenir inyeccion SQL
        $user = mysql_real_escape_string(stripslashes($user));

        // Realizamos la consulta y verificamos si la cantidad de filas en el
        // resultado es 1. Luego cerramos la conexion
        $sql = "SELECT pu.email FROM `" . $this->table . "` as pu WHERE `email` LIKE '" . $user . "@frsf.utn.edu.ar';";
        $result = mysql_query($sql);

        mysql_close($link);
        return (mysql_num_rows($result) == 1);
    }

    /**
     * makeRawSHA1Password_php5
     *
     * VERSION PHP5
     * Funcion que encripta una cadena siguiendo las convenciones para encriptar
     * passwords y almacenarlos en la DB de correos institucionales.
     *
     * @param String $clear Cadena de texto.
     * @return String Cadena de texto encriptada.
     */
    private function makeRawSHA1Password_php5($clear) {
        return '{SHA}' . base64_encode(sha1($clear, TRUE));
    }

    /**
     * makeRawSHA1Password_php4
     *
     * VERSION PHP5
     * Funcion que encripta una cadena siguiendo las convenciones para encriptar
     * passwords y almacenarlos en la DB de correos institucionales.
     *
     * @param String $clear Cadena de texto.
     * @return String Cadena de texto encriptada.
     */
    private function makeRawSHA1Password_php4($clear) {
        $hex = sha1($clear);
        $raw = '';
        for ($i = 0; $i < 40; $i +=2) {
            $hexcode = substr($hex, $i, 2);
            $charcode = (int) base_convert($hexcode, 16, 10);
            $raw .= chr($charcode);
        }
        return '{SHA}' . base64_encode($raw);
    }

}

/* End of file CuentaInstitucional.php */
/* Location: ./application/libraries/CuentaInstitucional.php */